<?php
/**
 * 商品属性管理模型类
 */
class GoodsAttrModel extends Model{
	public $table='goods_attr';//商品属性表

	public function __init(){//构造函数

	}
	
	 /**
     * 后台添加属性
     * @param $goods_gid 商品ID
     * @return bool
     */
    public function addAttr($goods_gid){
    	// p($_POST);exit;
        //不存在属性信息时不处理
        if (isset($_POST['attr_id_list'])) {
            //最终插入到goods_attr表中的数据           
            $data = array();
            /**
             * 循环添加属性
             */
            foreach ($_POST['attr_id_list'] as $n => $attr_id) {
                /**
                 * 属性数据
                 */
                $attr_value = $_POST['attr_value_list'][$n];//属性值
                $attr_price = $_POST['attr_price_list'][$n];//属性加价
                /**
                 * 属性值为空时不添加
                 */
                if (empty($attr_value)) {
                    continue;
                }
                $tmp = array(
                    'attr_value' => $attr_value,//属性值
                    'attr_price' => $attr_price,//属性价格
                    'goods_gid' => $goods_gid,//商品ID
                    'attr_id' => $attr_id//属性ID
                );
                /**
                 * 获得属性类型  1 普通属性   2 规格属性
                 */
                $attr_type = M('attribute')->where("attr_id=$attr_id")->getField('attr_type');
                $map['goods_gid'] = $goods_gid;
                $map['attr_id'] = $attr_id;
                if ($attr_type == 2) {
                    $map['attr_value'] = $attr_value;
                }
                $id = $this->where($map)->getField('id');
                if ($id) {
                    $tmp['id'] = $id;
                }
                $data[] = $tmp;
            }
            /**
             * 删除所有旧的属性
             */
            $this->where("goods_gid=$goods_gid")->del();
            /**
             * 添加属性
             */
            foreach ($data as $d){
                $this->add($d);
            }
        } else {
            return false;
        }
    }

    // 普通属性 读取attr_id/规格属性读取attr_id和值
	//获得商品属性
	public function get(){
		//商品类型id
		$cat_id=Q('cat_id',0,'intval');
		// p($_POST);exit;
		//商品id
		$gid=Q('goods_gid',0,'intval');
		//关联属性表和商品属性表
		if($gid){//编辑商品  ,子查询获得有商品id的商品属性
		  $sql = "select *,a.attr_value default_value,a.attr_id attr_id from attribute AS a LEFT JOIN
                  (SELECT * FROM goods_attr AS ga where goods_gid=$gid) AS c
                  ON a.attr_id=c.attr_id WHERE a.cat_id=$cat_id order by a.attr_id asc";
            $attr = M()->query($sql);
		}else{//添加商品
			$attr=M('attribute')->field('*,attr_value default_value')
			->where("cat_id=$cat_id order by attr_id asc")->all();
		}
		//录入方式的3种显示方式
		$method=array(1=>'_text',2=>'_select',3=>'_textarea');
		//记录已经处理的规格属性
		//用于计算[+] [-] js代码使用
		$recordAttr=array();
		//$attr所有商品属性,$goods_attr,1条属性
		foreach ($attr as $id =>$goodsAttr) {
			//动作,_text,_select _textarea
			$action=$method[$goodsAttr['attr_input_type']];
			//获得表单显示样式
			$html=$this->$action($goodsAttr);			
		//属性价格设置
			if($goodsAttr['attr_type']==2){//为规格属性时
				//属性价格
				$attr_price=isset($goodsAttr['attr_price'])?$goodsAttr['attr_price']:'';
				$html.="属性价格:<input type='text' name='attr_price_list[]' value='{$attr_price}'/>";
			}else{//类型属性为普通属性时
				$html.="<input type='hidden' name='attr_price_list[]' value='0'/>";
			}
		//属性attr_id表单
			$html.="<input type='hidden' name='attr_id_list[]' value='{$goodsAttr['attr_id']}'/>";
			//添加$html到商品属性中
			$attr[$id]['html']=$html;
		//规格属性设置[+]或[-]JavaScript代码
			if($goodsAttr['attr_type']==2){
				// in_array — 检查数组中是否存在某个值
				if(in_array($goodsAttr['attr_id'], $recordAttr)){
					$attr[$id]['attr_name']="<a href='javascript:;' onclick='removeAttr(this)'>[-] </a>" . $goodsAttr['attr_name'];
				}else{
					$attr[$id]['attr_name']="<a href='javascript:;' onclick='addAttr(this)'>[+]</a>".$goodsAttr['attr_name'];
				}
			}
			//已经处理的attr_id
			$recordAttr[]=$goodsAttr['attr_id'];
		}
		return $attr;
	}

	//文本框显示 $attr=$goodsAttr
	private function _text($attr){
		//属性值
		return "<input type='text' name='attr_value_list[]' value='{$attr['attr_value']}'/>";
	}
	//下拉框显示
	private function _select($attr){
		//使用换行分割下拉框里面的类型属性值
		$data=unserialize($attr['default_value']);
		// p($data);exit;
		 // $data = explode("\n", $attr['default_value']);
		// $data=implode("\n",$a);
		$html="<select name='attr_value_list[]' >";
		foreach ($data as $d) {//默认选中
			$select=$attr['attr_value']==trim($d)?"selected=''":'';
			$html.="<option $select>{$d}</option>";
		}
		$html.="</select>";
		return $html;		
	}

	//文本域输入
	private function _textarea($attr){
		return "<textarea name='attr_value_list[]'>{$attr['attr_value']}</textarea>";
	}
}